package com.class06;

import org.junit.jupiter.api.Test;

import java.io.*;
import java.lang.invoke.VarHandle;
import java.net.URL;

public class WriteAndReadFile {


    @Test
//    使用缓冲流进行文件的读写
    public void writeFile() throws IOException {
//        1、创建文件
        File file = new File("src/main/resources/test.txt");
        boolean newFile = file.createNewFile();
        if (newFile) {
            System.out.println("文件创建成功");
        } else {
            System.out.println("文件已经存在");
        }
        //        2、创建文件输出流及缓冲输出流
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        String str = "hello world";
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
        bufferedOutputStream.write(str.getBytes());
//        写入文件时，需要调用flush()方法，否则写入的数据不会被真正写入文件
        bufferedOutputStream.flush();
//        先开后关
        bufferedOutputStream.close();
        fileOutputStream.close();



//        3、写入文件
//        4、关闭流

    }


    @Test
    public void readFile() throws IOException {
//        1、获取当前类加载器，并配置文件路径
        URL resource = WriteAndReadFile.class.getClassLoader().getResource("test.txt");
        String path = resource.getPath();
        System.out.println("path: " + path);
//        2、创建文件输入流及缓冲输入流
        FileInputStream fileInputStream = new FileInputStream(path);
//        3、创建缓冲输入流
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
//        4、创建一个字节数组，用于存储读取的数据
        byte[] bytes = new byte[1024];
//        5、循环读取文件内容
        int len = bufferedInputStream.read(bytes);
        while (len != -1) {
            System.out.print(new String(bytes, 0, len));
            len = bufferedInputStream.read(bytes);
        }
//        4、关闭流
        bufferedInputStream.close();
        fileInputStream.close();
    }

}


